package main

import "fmt"
import "time"

// 这是一个我们将要在 Go 协程中运行的函数。
// done 通道将被用于通知其他 Go 协程这个函数已经工作完毕。
func worker(done chan bool) {
	fmt.Println("goroutine working...")
	time.Sleep(time.Second * 2)
	fmt.Println("goroutine done")

	// 发送一个值来通知我们已经完工啦。
	done <- true
}

func main() {
	// 创建一个通道，1个缓冲
	done := make(chan bool, 1)

	// 运行一个 worker Go协程，并给予用于通知的通道。
	go worker(done)

	// 在接收到通道中 worker 发出的通知前，程序将一直阻塞。
	<-done
	fmt.Println("main done")
}
